﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Bomberman
{
	[Serializable]
	public class Explosion : DependienteDelTiempo
	{
		public const string TodaDireccion = "Toda Direccion";
		private const int DuracionExplosion = 10;

		private int contadorExplosion = DuracionExplosion;
		private int alcanceRestante;
		private String direccion;
		private Casillero casilleroActual;
		private int poderDestructivo;

		public Explosion(Casillero casilleroActual, int poderDestructivo)
		{
			this.poderDestructivo = poderDestructivo;
			this.casilleroActual = casilleroActual;
			casilleroActual.AgregarExplosion(this);
		}

		public void Propagarse(int alcance, string direccion)
		{
			this.direccion = direccion;
			this.alcanceRestante = alcance;

			casilleroActual.DaniarContenido(poderDestructivo);

			if (alcance - 1 < 0) return;

			if (direccion == TodaDireccion)
			{
				foreach (KeyValuePair<String,Casillero> adyacente in casilleroActual.Adyacentes)
				{
					if (adyacente.Value != null)
					{
						Explosion explosion = new Explosion(adyacente.Value, poderDestructivo);
						explosion.Propagarse(alcance - 1, adyacente.Key);
					}
				}
			}
			else
			{
				if (casilleroActual.Adyacentes[direccion] != null)
				{
					Explosion explosion = new Explosion(casilleroActual.Adyacentes[direccion], poderDestructivo);
					explosion.Propagarse(alcance - 1, direccion);
				}
			}

		}


		public bool ObstruyeCamino()
		{
			return false;
		}

		public void RecibirAtaque(int danio)
		{
		}

		public void Update()
		{
			contadorExplosion--;
			if (contadorExplosion <= 0) casilleroActual.QuitarExplosion();
		}

	}
}
